/*
 * @Descripttion:vxe-table按需引入
 * @LastEditors: xzh
 * @LastEditTime: 2023-11-04 23:04:04
 */
import {
  // 核心
  VXETable,
  // 表格功能
  // Footer,
  // Icon,
  // Filter,
  Edit,
  // Menu,
  // Export,
  // Keyboard,
  Validator,

  // 可选组件
  Column,
  Colgroup,
  // Grid,
  Tooltip,
  // Toolbar,
  Pager,
  // Form,
  // FormItem,
  // FormGather,
  // Checkbox,
  // CheckboxGroup,
  // Radio,
  // RadioGroup,
  // RadioButton,
  // Switch,
  // Input,
  Select,
  // Optgroup,
  // Option,
  // Textarea,
  // Button,
  // Modal,
  // List,
  // Pulldown,

  // 表格
  Table,
} from "vxe-table";
import "vxe-table/lib/style.css";
import XEUtils from "xe-utils";
import i18n from "@/international/i18n";
import { object_Inf } from "@/utils/typings/index.type";
import { dayjs } from "element-plus";

/**
 * @Author: xzh
 * @Descripttion: 注册表格
 * @Param:
 */
let registerVxeTable = () => {
  // 按需加载的方式默认是不带国际化的，自定义国际化需要自行解析占位符 '{0}'，例如：
  VXETable.config({
    i18n: (key, args) => i18n().global.t(key, args),
  });
  // 自定义全局的格式化处理函数
  VXETable.formats.mixin({
    // 格式化性别
    formatSex({ cellValue }) {
      return cellValue ? (cellValue === "1" ? "男" : "女") : "";
    },
    // 格式化下拉选项
    formatSelect({ cellValue }: object_Inf, list: Array<object_Inf>) {
      const item = list.find((item: object_Inf) => item.value === cellValue);
      return item ? item.label : "";
    },
    // 格式化日期，默认 YYYY-MM-DD HH:mm:ss
    formatDateTime({ cellValue }: object_Inf, format: string) {
      return !!cellValue
        ? dayjs(cellValue).format(format || "YYYY-MM-DD HH:mm:ss")
        : "";
    },
    // 格式化日期，默认 YYYY-MM-DD
    formatDate({ cellValue }: object_Inf, format: string) {
      return !!cellValue ? dayjs(cellValue).format(format || "YYYY-MM-DD") : "";
    },
    // 格式化时间，默认 HH:mm:ss
    formatTime({ cellValue }: object_Inf, format: string) {
      return !!cellValue ? dayjs(cellValue).format(format || "HH:mm:ss") : "";
    },
    // 四舍五入金额，每隔3位逗号分隔，默认2位数
    formatAmount({ cellValue }: object_Inf, digits: number = 2) {
      return XEUtils.commafy(Number(cellValue), { digits });
    },
    // 格式化银行卡，默认每4位空格隔开
    formatBankcard({ cellValue }: object_Inf) {
      return XEUtils.commafy(XEUtils.toValueString(cellValue), {
        spaceNumber: 4,
        separator: " ",
      });
    },
    // 四舍五入,默认两位数
    formatFixedNumber({ cellValue }: object_Inf, digits: number = 2) {
      return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits);
    },
    // 向下舍入,默认两位数
    formatCutNumber({ cellValue }: object_Inf, digits: number = 2) {
      return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits);
    },
    // 转换 moment 类型为字符串
    toMomentString({ cellValue }: object_Inf, format: string) {
      return cellValue ? cellValue.format(format) : "";
    },
  });
};

export let useVxeTable = (app: any) => {
  // 表格功能
  app
    // .use(Footer)
    // .use(Icon)
    // .use(Filter)
    .use(Edit)
    // .use(Menu)
    // .use(Export)
    // .use(Keyboard)
    .use(Validator)

    // 可选组件
    .use(Column)
    .use(Colgroup)
    // .use(Grid)
    .use(Tooltip)
    // .use(Toolbar)
    .use(Pager)
    // .use(Form)
    // .use(FormItem)
    // .use(FormGather)
    // .use(Checkbox)
    // .use(CheckboxGroup)
    // .use(Radio)
    // .use(RadioGroup)
    // .use(RadioButton)
    // .use(Switch)
    // .use(Input)
    .use(Select)
    // .use(Optgroup)
    // .use(Option)
    // .use(Textarea)
    // .use(Button)
    // .use(Modal)
    // .use(List)
    // .use(Pulldown)

    // 安装表格
    .use(Table);
  //注册表格
  registerVxeTable();
};
